有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数学热到小数点后四舍五入到逗号后的下一个5的乘法

我想取最接近的十进制数。逗号后面的数字应该是5(逗号后面的两个数字)的乘法,其中1-3四舍五入到0,4-6四舍五入到5,7-9四舍五入到0,并向上舍入(递增)数字的左侧。如果是0,也跳过第三位

例如

4.985 -> 5.0

4.37 -> 4.4

2.14 -> 2.15

4.41 -> 4.4

5.29 -> 5.3

4.17 -> 4.2

2.07 -> 2.1

4.64 -> 4.65

5.21 -> 5.2

2.34 -> 2.35

我试过这个,但在一些测试中出错了

public static void main(String[ ] args) {
    double[] check = {4.985, 4.37, 2.14, 4.41, 5.29, 4.17, 2.07, 6.64, 5.21, 2.34, 4.89};
    double[] results = {5.0, 4.4, 2.15, 4.4, 5.3, 4.2, 2.1, 6.65, 5.2, 2.35, 4.9};
    for(int i=0; i<check.length; i++){
        double res = getClosestValue(check[i]);
        System.out.println(check[i]+" should be "+results[i]+" got "+res+" so it is "+
                        assertEquals(res, results[i]));
    }
}

public static boolean assertEquals(double a, double b){
    return a==b;
}

public static double getClosestValue(double number) {
    String value = String.valueOf(number).substring(0, 4);
    int firstDigit = Character.getNumericValue(value.charAt(0));
    int secondDigit = Character.getNumericValue(value.charAt(2));
    int lastDigit = Character.getNumericValue(value.charAt(3));
    boolean secondChange = false;
    if (lastDigit <= 3) {
        lastDigit = 0;
    } else if (lastDigit >= 7) {
        lastDigit = 0;
        secondDigit++;
        secondChange = true;
    } else {
        lastDigit = 5;
    }
    if(secondChange){
        if(secondDigit <= 3){
            secondDigit = 0;
        } else if(secondDigit >= 7){
            secondDigit = 0;
            firstDigit++;
        }
    }
    String result = firstDigit + "." + secondDigit + (lastDigit != 0 ? lastDigit : "");
    return Double.parseDouble(result);
}

结果:

  • 4.985应该是5.0得到5.0所以这是真的
  • 4.37应该是4.4得到4.4所以这是真的
  • 2.14应该是2.15得到2.15所以这是真的
  • 4.41应该是4.4得到4.4所以这是真的
  • 5.29应该是5.3得到5.0,所以它是
  • 4.17应该是4.2得到4.0,所以它是
  • 2.07应该是2.1得到2.0,所以它是
  • 6.64应该是6.65得到6.65所以这是真的
  • 5.21应该是5.2得到5.2所以这是真的
  • 2.34应该是2.35得到2.35所以这是真的
  • 4.89应该是4.9得到5.0,所以它是

我的代码中缺少什么?有没有更好的方法来实现这一点

编辑: 这与标记为duplicate的数字不同,我试图在逗号后舍入2个数字,而不仅仅是1个数字


共 (1) 个答案

  1. # 1 楼答案

    当最后一个数字大于或等于7,第二个数字小于3时,您的代码会出现意外输出。我查一下你的期望表

    根据您的意见,我认为您可以用以下代码替换相应的零件代码:

    if(secondChange){
        if (secondDigit == 10) {
            secondDigit = 0;
            firstDigit++;
        } 
    }